package com.ruoyi.source.service.impl;

import java.util.Arrays;
import java.util.List;
import java.util.Map;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.source.api.domain.SrcStore;
import com.ruoyi.source.domain.vo.SrcStoreVo;
import com.ruoyi.source.mapper.SrcStoreMapper;
import com.ruoyi.source.service.ISrcStoreService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * 仓储Service业务层处理
 * 
 * @author ruoyi
 * @date 2024-07-28
 */
@Service
public class SrcStoreServiceImpl extends ServiceImpl<SrcStoreMapper,SrcStore> implements ISrcStoreService {
    /**
     * 查询仓储
     * 
     * @param storeId 仓储主键
     * @return 仓储
     */
    @Override
    public SrcStore selectSrcStoreByStoreId(Long storeId) {
        return baseMapper.selectById(storeId);
    }

    /**
     * 查询仓储列表
     * 
     * @param srcStore 仓储
     * @return 仓储
     */
    @Override
    public List<SrcStore> selectSrcStoreList(SrcStore srcStore) {
        return baseMapper.selectSrcStoreList(srcStore);
    }

    /**
     * 新增仓储
     * 
     * @param srcStore 仓储
     * @return 结果
     */
    @Override
    public int insertSrcStore(SrcStore srcStore) {
        srcStore.setCreateTime(DateUtils.getNowDate());
        srcStore.setCreateBy(SecurityUtils.getUsername());
        return baseMapper.insert(srcStore);
    }

    /**
     * 修改仓储
     * 
     * @param srcStore 仓储
     * @return 结果
     */
    @Override
    public int updateSrcStore(SrcStore srcStore) {
        srcStore.setUpdateTime(DateUtils.getNowDate());
        srcStore.setUpdateBy(SecurityUtils.getUsername());
        return baseMapper.updateById(srcStore);
    }

    /**
     * 批量删除仓储
     * 
     * @param storeIds 需要删除的仓储主键
     * @return 结果
     */
    @Override
    public int deleteSrcStoreByStoreIds(Long[] storeIds) {
        SrcStore srcStore = new SrcStore();
        srcStore.setIsFault("1");
        //逻辑删除
        //return baseMapper.update(srcStore,Wrappers.<SrcStore>lambdaUpdate().in(SrcStore::getStoreId,storeIds));
        return baseMapper.deleteBatchIds(Arrays.asList(storeIds));
    }

    /**
     * 删除仓储信息
     * 
     * @param storeId 仓储主键
     * @return 结果
     */
    @Override
    public int deleteSrcStoreByStoreId(Long storeId) {
        SrcStore srcStore = new SrcStore();
        srcStore.setStoreId(storeId);
        srcStore.setIsFault("1");
        //逻辑删除
        //return baseMapper.updateById(srcStore);
        //物理删除
        return baseMapper.deleteById(storeId);
    }

    @Override
    public List<Map<String, Object>> getStoreList() {
        return baseMapper.selectMaps(Wrappers.<SrcStore>lambdaQuery().select(SrcStore::getStoreId, SrcStore::getStoreName).eq(SrcStore::getIsFault, 0));
    }

    @Override
    public void updateStoreUserIds(Long userId, Long[] storeIds) {
        SrcStore srcStore = new SrcStore();
        srcStore.setUserId(userId);
        if (baseMapper.selectCount(Wrappers.<SrcStore>lambdaQuery().eq(SrcStore::getUserId,userId))>0){
            baseMapper.update(srcStore,Wrappers.<SrcStore>lambdaUpdate().set(SrcStore::getUserId,null).in(SrcStore::getUserId,userId));
        }
        baseMapper.update(srcStore,Wrappers.<SrcStore>lambdaUpdate().in(SrcStore::getStoreId,storeIds));
    }
}
